1 创建一个基于对话框的工程,工程名称为MultiTab,向主对话框添加一个标签控件。
2 为标签控制关连变量:
CTabCtrl m_Tab;
3 创建两个对话框类CBookInfo和CBookDelte,类型为子窗口风格;
4 在MultiTabDlg.h引用两个子窗口,引用两个类的头文件及分别定义类对象:
#include "BookInfo.h"
#include "BookAdd.h"
class CMultiTabDlg : public CDialog
{
// Construction
public:
CMultiTabDlg(CWnd* pParent = NULL); // standard constructor
CBookInfo m_BookInfo;
CBookDelete m_BookDelete;
……
4 在主对话框初始化时(OnInitDialog方法中)向标签控件中添加上述的两个子对话框
//向标签控件中添加选项卡
m_Tab.InsertItem(0, "图书基础信息", 0);
m_Tab.InsertItem(1, "图书信息删除", 1);
//创建子窗口
m_BookInfo.Create(IDD_BOOKINFO_DIALOG, &m_Tab);
m_BookDelete.Create(IDD_BOOKADD_DIALOG, &m_Tab);
CRect clientRC;
m_Tab.GetClientRect(clientRC); //获取标签客户区域
clientRC.DeflateRect(2, 30, 2, 2); //减少客户区域大小
m_BookInfo.MoveWindow(clientRC); //移动子窗口
m_BookDelete.MoveWindow(clientRC); //移动子窗口
m_BookInfo.ShowWindow(SW_SHOW); //显示子窗口
m_Tab.SetCurSel(0); //设置默认选中的标签页
5 处理标签控件的TCN_SELCHANGE消息,该消息在用户改变当前选中的标签而时触发,在消息处理函数中根据当前的标签页索引显示和隐藏相应的子窗口。
void CMultiTabDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
int nCurSel = m_Tab.GetCurSel();
if (nCurSel == 0)
{
m_BookInfo.ShowWindow(SW_SHOW);
m_BookDelete.ShowWindow(SW_HIDE);
}
else if (nCurSel == 1)
{
m_BookDelete.ShowWindow(SW_SHOW);
m_BookInfo.ShowWindow(SW_HIDE);
}
*pResult = 0;
}